﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SmartMathLibrary.Management.Performance
{
    /// <summary>
    /// This struct holds significant information of a processor.
    /// </summary>
    [Serializable]
    public struct ProcessorInformation
    {
        /// <summary>
        /// The AddressWidth property.
        /// </summary>
        private UInt16 addressWidth;

        /// <summary>
        /// The Architecture property.
        /// </summary>
        private UInt16 architecture;

        /// <summary>
        /// The Availability property.
        /// </summary>
        private UInt16 availability;

        /// <summary>
        /// The Caption property.
        /// </summary>
        private string caption;

        /// <summary>
        /// The ConfigManagerErrorCode property.
        /// </summary>
        private UInt32 configManagerErrorCode;

        /// <summary>
        /// The ConfigManagerUserConfig property.
        /// </summary>
        private bool configManagerUserConfig;

        /// <summary>
        /// The CpuStatus property.
        /// </summary>
        private UInt16 cpuStatus;

        /// <summary>
        /// The CreationClassName property.
        /// </summary>
        private string creationClassName;

        /// <summary>
        /// The CurrentClockSpeed property.
        /// </summary>
        private UInt32 currentClockSpeed;

        /// <summary>
        /// The CurrentVoltage property.
        /// </summary>
        private UInt16 currentVoltage;

        /// <summary>
        /// The DataWidth property.
        /// </summary>
        private UInt16 dataWidth;

        /// <summary>
        /// The Description property.
        /// </summary>
        private string description;

        /// <summary>
        /// The DeviceID property.
        /// </summary>
        private string deviceID;

        /// <summary>
        /// The ErrorCleared property.
        /// </summary>
        private bool errorCleared;

        /// <summary>
        /// The ErrorDescription property.
        /// </summary>
        private string errorDescription;

        /// <summary>
        /// The ExtClock property.
        /// </summary>
        private UInt32 extClock;

        /// <summary>
        /// The Family property.
        /// </summary>
        private UInt16 family;

        /// <summary>
        /// The L2CacheSize property.
        /// </summary>
        private UInt32 l2CacheSize;

        /// <summary>
        /// The L2CacheSpeed property.
        /// </summary>
        private UInt32 l2CacheSpeed;

        /// <summary>
        /// The LastErrorCode property.
        /// </summary>
        private UInt32 lastErrorCode;

        /// <summary>
        /// The Level property.
        /// </summary>
        private UInt16 level;

        /// <summary>
        /// The LoadPercentage property.
        /// </summary>
        private UInt16 loadPercentage;

        /// <summary>
        /// The Manufacturer property.
        /// </summary>
        private string manufacturer;

        /// <summary>
        /// The MaxClockSpeed property.
        /// </summary>
        private UInt32 maxClockSpeed;

        /// <summary>
        /// The Name property.
        /// </summary>
        private string name;

        /// <summary>
        /// The OtherFamilyDescription property.
        /// </summary>
        private string otherFamilyDescription;

        /// <summary>
        /// The PNPDeviceID property.
        /// </summary>
        private string pnpDeviceID;

        /// <summary>
        /// The PowerManagementSupported property.
        /// </summary>
        private bool powerManagementSupported;

        /// <summary>
        /// The ProcessorId property.
        /// </summary>
        private string processorId;

        /// <summary>
        /// The ProcessorType property.
        /// </summary>
        private UInt16 processorType;

        /// <summary>
        /// The Revision property.
        /// </summary>
        private UInt16 revision;

        /// <summary>
        /// The Role property.
        /// </summary>
        private string role;

        /// <summary>
        /// The SocketDesignation property.
        /// </summary>
        private string socketDesignation;

        /// <summary>
        /// The Status property.
        /// </summary>
        private string status;

        /// <summary>
        /// The StatusInfo property.
        /// </summary>
        private UInt16 statusInfo;

        /// <summary>
        /// The Stepping property.
        /// </summary>
        private string stepping;

        /// <summary>
        /// The SystemCreationClassName property.
        /// </summary>
        private string systemCreationClassName;

        /// <summary>
        /// The SystemName property.
        /// </summary>
        private string systemName;

        /// <summary>
        /// The UniqueId property.
        /// </summary>
        private string uniqueId;

        /// <summary>
        /// The UpgradeMethod property.
        /// </summary>
        private UInt16 upgradeMethod;

        /// <summary>
        /// The Version property.
        /// </summary>
        private string version;

        /// <summary>
        /// The VoltageCaps property.
        /// </summary>
        private UInt32 voltageCaps;

        /// <summary>
        /// Gets or sets the AddressWidth property.
        /// </summary>
        /// <value>The AddressWidth property.</value>
        public UInt16 AddressWidth
        {
            get { return addressWidth; }
            set { addressWidth = value; }
        }

        /// <summary>
        /// Gets or sets the Architecture property.
        /// </summary>
        /// <value>The Architecture property.</value>
        public UInt16 Architecture
        {
            get { return architecture; }
            set { architecture = value; }
        }

        /// <summary>
        /// Gets or sets the Availability property.
        /// </summary>
        /// <value>The Availability property.</value>
        public UInt16 Availability
        {
            get { return availability; }
            set { availability = value; }
        }

        /// <summary>
        /// Gets or sets the Caption property.
        /// </summary>
        /// <value>The Caption property.</value>
        public string Caption
        {
            get { return caption; }
            set { caption = value; }
        }

        /// <summary>
        /// Gets or sets the ConfigManagerErrorCode property.
        /// </summary>
        /// <value>The ConfigManagerErrorCode property.</value>
        public UInt32 ConfigManagerErrorCode
        {
            get { return configManagerErrorCode; }
            set { configManagerErrorCode = value; }
        }

        /// <summary>
        /// Gets or sets the ConfigManagerUserConfig property.
        /// </summary>
        /// <value>The ConfigManagerUserConfig property.</value>
        public bool ConfigManagerUserConfig
        {
            get { return configManagerUserConfig; }
            set { configManagerUserConfig = value; }
        }

        /// <summary>
        /// Gets or sets the CpuStatus property.
        /// </summary>
        /// <value>The CpuStatus property.</value>
        public UInt16 CpuStatus
        {
            get { return cpuStatus; }
            set { cpuStatus = value; }
        }

        /// <summary>
        /// Gets or sets the CreationClassName property.
        /// </summary>
        /// <value>The CreationClassName property.</value>
        public string CreationClassName
        {
            get { return creationClassName; }
            set { creationClassName = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentClockSpeed property.
        /// </summary>
        /// <value>The CurrentClockSpeed property.</value>
        public UInt32 CurrentClockSpeed
        {
            get { return currentClockSpeed; }
            set { currentClockSpeed = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentVoltage property.
        /// </summary>
        /// <value>The CurrentVoltage property.</value>
        public UInt16 CurrentVoltage
        {
            get { return currentVoltage; }
            set { currentVoltage = value; }
        }

        /// <summary>
        /// Gets or sets the DataWidth property.
        /// </summary>
        /// <value>The DataWidth property.</value>
        public UInt16 DataWidth
        {
            get { return dataWidth; }
            set { dataWidth = value; }
        }

        /// <summary>
        /// Gets or sets the Description property.
        /// </summary>
        /// <value>The Description property.</value>
        public string Description
        {
            get { return description; }
            set { description = value; }
        }

        /// <summary>
        /// Gets or sets the DeviceID property.
        /// </summary>
        /// <value>The DeviceID property.</value>
        public string DeviceID
        {
            get { return deviceID; }
            set { deviceID = value; }
        }

        /// <summary>
        /// Gets or sets the ErrorCleared property.
        /// </summary>
        /// <value>The ErrorCleared property.</value>
        public bool ErrorCleared
        {
            get { return errorCleared; }
            set { errorCleared = value; }
        }

        /// <summary>
        /// Gets or sets the ErrorDescription property.
        /// </summary>
        /// <value>The ErrorDescription property.</value>
        public string ErrorDescription
        {
            get { return errorDescription; }
            set { errorDescription = value; }
        }

        /// <summary>
        /// Gets or sets the ExtClockExtClock property.
        /// </summary>
        /// <value>The ExtClockExtClock property.</value>
        public UInt32 ExtClock
        {
            get { return extClock; }
            set { extClock = value; }
        }

        /// <summary>
        /// Gets or sets the Family property.
        /// </summary>
        /// <value>The Family property.</value>
        public UInt16 Family
        {
            get { return family; }
            set { family = value; }
        }

        /// <summary>
        /// Gets or sets the L2CacheSize property.
        /// </summary>
        /// <value>The L2CacheSize property.</value>
        public UInt32 L2CacheSize
        {
            get { return l2CacheSize; }
            set { l2CacheSize = value; }
        }

        /// <summary>
        /// Gets or sets the L2CacheSpeed property.
        /// </summary>
        /// <value>The L2CacheSpeed property.</value>
        public UInt32 L2CacheSpeed
        {
            get { return l2CacheSpeed; }
            set { l2CacheSpeed = value; }
        }

        /// <summary>
        /// Gets or sets the LastErrorCode property.
        /// </summary>
        /// <value>The LastErrorCode property.</value>
        public UInt32 LastErrorCode
        {
            get { return lastErrorCode; }
            set { lastErrorCode = value; }
        }

        /// <summary>
        /// Gets or sets the Level property.
        /// </summary>
        /// <value>The Level property.</value>
        public UInt16 Level
        {
            get { return level; }
            set { level = value; }
        }

        /// <summary>
        /// Gets or sets the LoadPercentage property.
        /// </summary>
        /// <value>The LoadPercentage property.</value>
        public UInt16 LoadPercentage
        {
            get { return loadPercentage; }
            set { loadPercentage = value; }
        }

        /// <summary>
        /// Gets or sets the Manufacturer property.
        /// </summary>
        /// <value>The Manufacturer property.</value>
        public string Manufacturer
        {
            get { return manufacturer; }
            set { manufacturer = value; }
        }

        /// <summary>
        /// Gets or sets the MaxClockSpeed property.
        /// </summary>
        /// <value>The MaxClockSpeed property.</value>
        public UInt32 MaxClockSpeed
        {
            get { return maxClockSpeed; }
            set { maxClockSpeed = value; }
        }

        /// <summary>
        /// Gets or sets the Name property.
        /// </summary>
        /// <value>The Name property.</value>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        /// <summary>
        /// Gets or sets the OtherFamilyDescription property.
        /// </summary>
        /// <value>The OtherFamilyDescription property.</value>
        public string OtherFamilyDescription
        {
            get { return otherFamilyDescription; }
            set { otherFamilyDescription = value; }
        }

        /// <summary>
        /// Gets or sets the PNPDeviceID property.
        /// </summary>
        /// <value>The PNPDeviceID property.</value>
        public string PNPDeviceID
        {
            get { return pnpDeviceID; }
            set { pnpDeviceID = value; }
        }

        /// <summary>
        /// Gets or sets the PowerManagementSupported property.
        /// </summary>
        /// <value>The PowerManagementSupported property.</value>
        public bool PowerManagementSupported
        {
            get { return powerManagementSupported; }
            set { powerManagementSupported = value; }
        }

        /// <summary>
        /// Gets or sets the ProcessorId property.
        /// </summary>
        /// <value>The ProcessorId property.</value>
        public string ProcessorId
        {
            get { return processorId; }
            set { processorId = value; }
        }

        /// <summary>
        /// Gets or sets the ProcessorType property.
        /// </summary>
        /// <value>The ProcessorType property.</value>
        public UInt16 ProcessorType
        {
            get { return processorType; }
            set { processorType = value; }
        }

        /// <summary>
        /// Gets or sets the Revision property.
        /// </summary>
        /// <value>The Revision property.</value>
        public UInt16 Revision
        {
            get { return revision; }
            set { revision = value; }
        }

        /// <summary>
        /// Gets or sets the Role property.
        /// </summary>
        /// <value>The Role property.</value>
        public string Role
        {
            get { return role; }
            set { role = value; }
        }

        /// <summary>
        /// Gets or sets the SocketDesignation property.
        /// </summary>
        /// <value>The SocketDesignation property.</value>
        public string SocketDesignation
        {
            get { return socketDesignation; }
            set { socketDesignation = value; }
        }

        /// <summary>
        /// Gets or sets the Status property.
        /// </summary>
        /// <value>The Status property.</value>
        public string Status
        {
            get { return status; }
            set { status = value; }
        }

        /// <summary>
        /// Gets or sets the StatusInfo property.
        /// </summary>
        /// <value>The StatusInfo property.</value>
        public UInt16 StatusInfo
        {
            get { return statusInfo; }
            set { statusInfo = value; }
        }

        /// <summary>
        /// Gets or sets the Stepping property.
        /// </summary>
        /// <value>The Stepping property.</value>
        public string Stepping
        {
            get { return stepping; }
            set { stepping = value; }
        }

        /// <summary>
        /// Gets or sets the SystemCreationClassName property.
        /// </summary>
        /// <value>The SystemCreationClassName property.</value>
        public string SystemCreationClassName
        {
            get { return systemCreationClassName; }
            set { systemCreationClassName = value; }
        }

        /// <summary>
        /// Gets or sets the SystemName property.
        /// </summary>
        /// <value>The SystemName property.</value>
        public string SystemName
        {
            get { return systemName; }
            set { systemName = value; }
        }

        /// <summary>
        /// Gets or sets the UniqueId property.
        /// </summary>
        /// <value>The UniqueId property.</value>
        public string UniqueId
        {
            get { return uniqueId; }
            set { uniqueId = value; }
        }

        /// <summary>
        /// Gets or sets the UpgradeMethod property.
        /// </summary>
        /// <value>The UpgradeMethod property.</value>
        public UInt16 UpgradeMethod
        {
            get { return upgradeMethod; }
            set { upgradeMethod = value; }
        }

        /// <summary>
        /// Gets or sets the Version property.
        /// </summary>
        /// <value>The Version property.</value>
        public string Version
        {
            get { return version; }
            set { version = value; }
        }

        /// <summary>
        /// Gets or sets the VoltageCaps property.
        /// </summary>
        /// <value>The VoltageCaps property.</value>
        public UInt32 VoltageCaps
        {
            get { return voltageCaps; }
            set { voltageCaps = value; }
        }
    }
}